iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

宣告類時,若是在屬性或方法前面加上static 代表這個屬性或方法屬於靜態屬性、靜態方法,所有實例化的類會共用這一個靜態屬性、靜態方法。

可以修飾的部分有:

  • 屬性
  • 方法
  • 程式碼塊
  • 內部類
public class MobileTest {
	public static void main(String[] args) {
	
		System.out.println(Mobile.system); // null
		Mobile m1 = new Mobile();
		
		m1.name = "Iphone11";
		
		Mobile m2 = new Mobile();
		
		m2 = "Iphone12";
		m1.system  = "IOS";
		
		System.out.println(m2.system); // IOS
		
		m2.system = "Android";
		
		System.out.println(m1.system); // Android
		
	}
	
}

class Mobile {
	String name;
	
	static String system;
	
}

上面的例子可以看到:

  1. 一開始就可以從Mobile 類將system印出null ,因為沒有替Static 中的靜態屬性 system 賦值,所以他會是引用類型的初始化 null ,因為靜態屬性是在 加載時就已經會先加載,而一般非靜態屬性的屬性是在實例化 時才進行加載。
  2. 當透過m1system 賦成Iphone 時,印出m2system 也會是同樣值IOS
  3. 當透過m2 將將system 賦成Android 時,印出m1system 也會是同樣值Android

JDK7 以前,靜態屬性 存放的位置會是在Method Area(方法區) 中,但是從JDK8 後開始,都將靜態屬性放在Heap 內,與一般的物件放的位置相同。

使用static 修飾的靜態方法不能使用 thissuper ,因為這兩個關鍵字 所指的都是當前物件 ,但是static 指的是當前 ,在裡面使用靜態屬性 時,所省略的是類名. ,而不是省略this.

一般在開發中會將屬性宣告為靜態:

  • 多個物件共享同一個屬性,且這個屬性的值是相同的。
  • 這個屬性的值屬於常量。例如數學中的PI

一般在開發中會將方法宣告為靜態:

  • 方法中所使用的屬性都是屬於靜態屬性
  • 適用於當作工具使用時。例如ArraysMath 中的方法都是屬於靜態方法

上一篇
Day20-Object & 4方法
下一篇
Day22-單例模式、初始化區塊
系列文
前端工程師的java學習紀錄38
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言